### Table of Contents
1 [API Reference Documentation](#api-reference-documentation)  
  1.1 [Создание пользователя](#11-создание-пользователя)    
  1.2 [Начало игры](#12-начало-игры)  
  1.3 [Игра](#13-игра)  
  1.4 [Окончание игры](#14-окончание-игры)  

### API Reference Documentation
#### 1.1 Создание пользователя
###### Запрос
```
POST /user
{
  "name": <name>,
  "password": <password>
}
```
###### Ответ
Если пользователь успешно создан, возвращается
```
200 OK
{
  "name": <name>,
  "password": <password>
}
```

В случае, если пользователь не может быть создан, так как такое имя уже занято или по другой причине
```
409 Conflict
```

#### 1.2 Начало игры

###### Тело запроса для начала игры
```
{
  "role": player|observer,
  "position": white|black
}
```

###### Создание новой игры
```
POST /game/{id}/room/{id}/board
или
PATCH /game/{id}/room/{id}/board/any
в случае, если нет игры с неполным числом игроков
```

######  Подключение к существующей игре
```
PATCH /game/{id}/room/{id}/board/{id}
садимся за выбраную доску
PATCH /game/{id}/room/{id}/board/any
садимся за случайную доску
```

###### Ответ на создание или подключение к игре
Также этот ответ используется во время игры
```
200 OK
{
  "id": <id>,
  "turn": <user.position> 
  "status": waiting, playing
  "details": "x0____x__",
  "users": [{
    "name": <name>,
    "role": player|observer,
    "position": white|black
  }]
}
```

Как только за доску сели два игрока, начинается игра (статус меняется: ожидание/waiting -> игра/playing).
Параметр `turn` говорит о том, какой должен сделать ход.

#### 1.3 Игра

###### Выполнение хода
```
PATCH /game/(id}/room/{id}/board/{id}
{
  "details": "____x____"
}
```
Сервер проверят возможность хода и в случае успешности возвращает [ответ](#ответ-на-создание-или-подключение-к-игре)

Если же ход невозможно сделать, возвращается ответ
```
409 Conflict
```

После выполнения хода игрок должен опрашивать сервер, сделан ли ответный ход с ожидаемым [ответом](#ответ-на-создание-или-подключение-к-игре)
```
GET /game/(id}/room/{id}/board/{id}
```

###### 1.4 Окончание игры

При окончании игры в [ответ](#ответ-на-создание-или-подключение-к-игре)e используется расширенный статус:
```
{
  "status": draw|white won|black won
}  
```
Далее игра за данным столом невозможна и логика переходит к [началу](#12-начало-игры)






